package com.chenwut.Exercise;

/*
* 自幂数，一个n位自然数等于自身各个数位上数字的n次幂之和

举例1：三位数  1^3 + 5^3 + 3^3 = 153

举例2：四位数  1^4 + 6^4 + 3^4 + 4^3 = 1634

如果自幂数是：

* 一位自幂数，也叫做：独身数
* 三位自幂数：水仙花数  四位自幂数：四叶玫瑰数
* 五位自幂数：五角星数  六位自幂数：六合数
* 七位自幂数：北斗七星数  八位自幂数：八仙数
* 九位自幂数：九九重阳数  十位自幂数：十全十美数

要求1：统计一共有多少个水仙花数。

要求2：（课后作业）证明没有两位的自幂数。

要求3：（课后作业）分别统计有多少个四叶玫瑰数和五角星数。（答案：都是3个）
* */
public class Exercise1 {
    public static void main(String[] args) {
        System.out.println(countShuiXian());
        System.out.println(twoWei());
        System.out.println(countSiYe());
        System.out.println(countWuYe());
    }

    private static int countWuYe() {
        int count = 0;
        for (int i = 10000; i <= 99999; i++) {
            //得到个、十、百位上的数字
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 100 % 10;
            int qian = i / 1000 % 10;
            int wan = i / 10000 % 10;
            if (i == Math.pow(ge, 5) + Math.pow(shi, 5) + Math.pow(bai, 5) +
                    Math.pow(qian, 5) + Math.pow(wan, 5)) {
                count++;
            }
        }
        return count;
    }

    private static int countSiYe() {
        int count = 0;
        for (int i = 1000; i <= 9999; i++) {
            //得到个、十、百位上的数字
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 100 % 10;
            int qian = i / 1000 % 10;
            if (i == Math.pow(ge, 4) + Math.pow(shi, 4) + Math.pow(bai, 4) + Math.pow(qian, 4)) {
                count++;
            }
        }
        return count;
    }


    private static boolean twoWei() {
        int count = 0;
        for (int i = 10; i <= 99; i++) {
            //得到个、十、百位上的数字
            int ge = i % 10;
            int shi = i / 10 % 10;
            if (i == Math.pow(ge, 2) + Math.pow(shi, 2)) {
                count++;
            }
        }
        if (count == 0) {
            return false;
        }
        return true;
    }

    private static int countShuiXian() {
        int count = 0;
        for (int i = 100; i <= 999; i++) {
            //得到个、十、百位上的数字
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 100 % 10;
            if (i == Math.pow(ge, 3) + Math.pow(shi, 3) + Math.pow(bai, 3)) {
                count++;
            }
        }
        return count;
    }

}
